<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    
    <link rel="stylesheet" href="../lib/bootstrap.css">
    <title>Document</title>
    <script src="vue.js"> </script>
</head>
<body>
    <div id="app">
        <div class="panel panel-primary">
          <div class="panel-heading">
            <h3 class="panel-title">添加品牌</h3>
          </div>
          <div class="panel-body form-inline">
            <label>
              Id:
              <input type="text" class="form-control" v-model="id">
            </label>
    
            <label>
              Name:
              <input type="text" class="form-control" v-model="name" @keyup.113='add'>
            </label>
    
            <!-- 在Vue中，使用事件绑定机制，为元素指定处理函数的时候，如果加了小括号，就可以给函数传参了 -->
            <input type="button" value="添加" class="btn btn-primary" @click="add()">
    
            <label>
              搜索名称关键字：
              <input type="text" class="form-control" v-model="keywords" v-focus v-color='"pink"' v-fontweight="200"> 
            </label>
          </div>
        </div>
        <table class="table table-bordered table-hover table-striped">
          <thead>
            <tr>
              <th>Id</th>
              <th>Name</th>
              <th>Ctime</th>
              <th>Operation</th>
            </tr>
          </thead>
          <tbody>
            <!-- 之前， v-for 中的数据，都是直接从 data 上的list中直接渲染过来的 -->
            <!-- 现在， 我们自定义了一个 search 方法，同时，把 所有的关键字，通过传参的形式，传递给了 search 方法 -->
            <!-- 在 search 方法内部，通过 执行 for 循环， 把所有符合 搜索关键字的数据，保存到 一个新数组中，返回 -->
            <tr v-for="item in search(keywords)" :key="item.id">
              <td>{{ item.id }}</td>
              <td v-text="item.name"></td>
              <td>{{ item.ctime | timeopt('yyyy-mm-dd')}}</td>
              <td>
                <a href="" @click.prevent="del(item.id)">删除</a>
              </td>
            </tr>
          </tbody>
        </table>
      </div>
</body>
<script>
    //自定义全局过滤器
    // Vue.filter('timeopt',function(data,status=""){
    //     var date=new Date(data)
    //     var y=date.getFullYear()
    //     var m=(date.getMonth()+1).toString().padStart('2','0')//padEnd()
    //     var d=date.getDate().toString().padStart('2','0')
    //     if(status==='yyyy-mm-dd'){
    //         return `${y}-${m}-${d}`
    //     }else{
    //         var hh=data.getHours().toString().padStart('2','0')
    //         var mm=data.getMinutes().toString().padStart('2','0')
    //         var ss=data.getSeconds().toString().padStart('2','0')
    //         return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
    //     }
    // })
    //自定义全局属性
    Vue.directive('focus',{
        bind:function(el){//当每个指令绑定到元素上的时候 执行一次 此时元素上刚绑定指令
        //并未挂载到DOM树上，所以focus 没有作用，因为一个元素只有在DOM树上才能获取焦点

        },
        inserted:function(el){//表示元素刚插入到dom中的时候 执行一次
            el.focus()
        },
        updated:function(el){//vnode更新的时候执，可能会执行多次

        }
    })
    Vue.directive('color',{
        bind:function(el,binding){
            //第二个参数 常用属性:binding.value=>pink     binding.expression=>'pink'     binding.name=>color
            el.style.color=binding.value
        }
    })
    //自定义设置...
    Vue.config.keyCodes.f2=113
    var vm=new Vue({
        el:'#app',
        data:{
            id:"",
            name:'',
            keywords:'',
            list:[
                {id:1,name:"宝马",ctime:new Date()},
            ]
        },
        methods:{
            add(){
                var car={id:this.id,name:this.name,ctime:new Date()}
                if(car.id===''||car.name==='')return
                this.list.push(car)
                this.id=''
                this.name=""
            },
            del(id){
                this.list.some((item,i) => {
                    if(item.id===id){
                        this.list.splice(i,1)
                        return true
                    }
                })
            },
            search(keywords){
                return this.list.filter(item => {
                    if(item.name.includes(keywords)){
                        return item
                    }
                })
            }
        },
        filters:{//自定义私有过滤器
                timeopt:function(data,status=""){
                var date=new Date(data)
                var y=date.getFullYear()
                var m=(date.getMonth()+1).toString().padStart('2','0')//padEnd()
                var d=date.getDate().toString().padStart('2','0')
                if(status==='yyyy-mm-dd'){
                    return `${y}-${m}-${d}`
                }else{
                    var hh=data.getHours().toString().padStart('2','0')
                    var mm=data.getMinutes().toString().padStart('2','0')
                    var ss=data.getSeconds().toString().padStart('2','0')
                    return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
                }
            }
        },
        directives:{//自定义私有指令
            'fontweight':{
                bind:function(el,binding){
                    el.style.fontWeight=binding.value
                }
            }
        }
    })
</script>
</html>